/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.ec.socialfun.controladores;

import com.ec.socialfun.datamanager.ReservaEventoDataManager;
import com.ec.socialfun.entidades.Evento;
import com.ec.socialfun.entidades.EventoUsuario;
import com.ec.socialfun.enumeradores.EstadoEnum;
import com.ec.socialfun.excepciones.RecuperaEventoUsuarioException;
import com.ec.socialfun.excepciones.RegistrarReservaException;
import com.ec.socialfun.servicios.EventoFacade;
import com.ec.socialfun.servicios.EventoUsuarioFacade;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.RequestScoped;
import javax.faces.component.UIForm;
import org.jboss.logging.Logger;

/**
 *
 * @author jorge
 */
@ManagedBean
@RequestScoped
public class ReservaEventoControlador extends PadreControlador {

    private static final Logger LOG = Logger.getLogger(ReservaEventoControlador.class.getName());
    private UIForm formularioReservaEvento;
    @ManagedProperty(value = "#{reservaEventoDataManager}")
    private ReservaEventoDataManager reservaEventoDataManager;
    @EJB
    private EventoFacade eventoFacade;
    @EJB
    private EventoUsuarioFacade eventoUsuarioFacade;

    /**
     * Creates a new instance of ReservaEventoControlador
     */
    public ReservaEventoControlador() {
    }

    public UIForm getFormularioReservaEvento() {
        String IdEvento = obtenerParametro("idEvento");
        if (IdEvento != null) {
            try {
                LOG.info("PARAMETRO IdEvento= " + IdEvento);
                Evento evento = eventoFacade.recuperaPorCodigo(Integer.parseInt(IdEvento));
                getReservaEventoDataManager().setEvento(evento);
                EventoUsuario eventoUsuario = eventoUsuarioFacade.recuperarEventoUsuario(evento, this.obtenerUsuarioLogeado());
                getReservaEventoDataManager().setReservar(eventoUsuario.getEvUsEstado().equals(EstadoEnum.RESERVADO.getCodigo()) ? false : true);
                getReservaEventoDataManager().setEventoUsuario(eventoUsuario);

                if (getReservaEventoDataManager().isReservar()) {
                    getReservaEventoDataManager().setTitulo("Su reserva esta cancelada para el evento: " + getReservaEventoDataManager().getEvento().getEvDescripcion() + " , por favor actualice sus datos y realice una nueva reservación ");
                } else {
                    getReservaEventoDataManager().setTitulo("Usted va a cancelar la reserva para el evento: " + getReservaEventoDataManager().getEvento().getEvDescripcion());
                }

            } catch (RecuperaEventoUsuarioException ex) {
                getReservaEventoDataManager().setReservar(true);
                getReservaEventoDataManager().setEventoUsuario(new EventoUsuario());
                getReservaEventoDataManager().setTitulo("Va a realizar la reserva para el siguiente evento: " + getReservaEventoDataManager().getEvento().getEvDescripcion());
            }
        }
        return formularioReservaEvento;
    }

    public void setFormularioReservaEvento(UIForm formularioReservaEvento) {
        this.formularioReservaEvento = formularioReservaEvento;
    }

    public void reservarEvento() {

        try {
            EventoUsuario eventoUsuario = getReservaEventoDataManager().getEventoUsuario();
            eventoUsuarioFacade.registrarReserva(eventoUsuario, this.obtenerUsuarioLogeado(), this.getReservaEventoDataManager().getEvento());
            getReservaEventoDataManager().setEventoUsuario(new EventoUsuario());
            this.mensajeExitoso("La reserva ha sido registrada");
        } catch (RegistrarReservaException ex) {
            this.mensajeError("Error al realizar la reserva");
        }
    }

    public void cancelarReservarEvento() {
        try {
            EventoUsuario eventoUsuario = getReservaEventoDataManager().getEventoUsuario();
            eventoUsuarioFacade.cancelarReserva(eventoUsuario, this.obtenerUsuarioLogeado(), this.getReservaEventoDataManager().getEvento());
            getReservaEventoDataManager().setEventoUsuario(new EventoUsuario());
            this.mensajeExitoso("La reserva ha sido cancelada");
        } catch (RegistrarReservaException ex) {
            this.mensajeError("Error al realizar la cancelación de la reserva");
        }

    }

    @Override
    public void iniciarDatos() {
        LOG.info("iniciarDatos");
    }

    public ReservaEventoDataManager getReservaEventoDataManager() {
        return reservaEventoDataManager;
    }

    public void setReservaEventoDataManager(ReservaEventoDataManager reservaEventoDataManager) {
        this.reservaEventoDataManager = reservaEventoDataManager;
    }
}
